home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2005 October / PCWOCT05.iso / Software / FromTheMag / XAMPP 1.4.14 / xampp-win32-1.4.14-installer.exe / xampp / php / extras / pdf-related / print_glyphs.ps < prev    next >
Text File  |  2005-03-30  |  3KB  |  131 lines

  1. %!PS-Adobe
  2. % print_glyphs.ps
  3. % Copyright (C) Thomas Merz 1994-2002
  4. %
  5. % This PostScript program prints all glyphs in a font along
  6. % with their names in alphabetical ordering.
  7. % It requires a PostScript Level 2 or PostScript 3 interpreter.
  8. % It also works with Acrobat Distiller.
  9. %
  10. % Usage:
  11. % - The font must either be resident in the printer, or be
  12. %   downloaded ahead of this program (as a single job).
  13. %   Alternatively, the font can be configure in Distiller.
  14. % - At the end of this file, enter a line with the font name, e.g.:
  15. %   /Times-Roman ShowGlyphs
  16. %   (Omit the percent character, but leave the leading slash '/')
  17.  
  18.  
  19. /$sort 20 dict def
  20.  
  21. /Insert { % node string ==> -
  22.     exch dup 0 get type (nulltype) eq { % ifelse
  23.         exch [ exch 1 array 1 array ] 0 exch put
  24.     }{ % else
  25.         aload pop aload pop 4 2 roll 2 copy gt { % ifelse
  26.             pop 3 -1 roll pop Insert
  27.         }{ %else
  28.             pop exch pop Insert
  29.         } ifelse
  30.     } ifelse
  31. } def
  32.  
  33. /PrefixWalk {
  34.     $sort begin
  35.     cvx /!bt exch def bpwalk 
  36.     end
  37. } def
  38.  
  39. $sort begin
  40. /bpwalk {
  41.     dup 0 get type /nulltype eq { pop }{ % ifelse
  42.     aload pop aload pop exch bpwalk exch !bt bpwalk
  43.     } ifelse
  44. } bind def
  45.     
  46. end % $sort
  47.  
  48. /DictSort {    % dict ==> array
  49.     dup length array /a exch def
  50.     $sort begin
  51.     /tree 1 array def
  52.     { pop 50 string cvs tree exch Insert } forall
  53.     /ndx 0 def
  54.     tree { a ndx 3 -1 roll put /ndx ndx 1 add def } PrefixWalk
  55.     a
  56. } bind def
  57.  
  58. /ShowGlyphs {                     % font name ==> -
  59.     /buffer 100 string def
  60.     /FontName 100 string def
  61.     /fs 20 def                     % font size
  62.     /ts 7 def                     % font size of caption
  63.     /ls fs 1.75 mul def             % line spacing
  64.  
  65.     dup FontName cvs pop
  66.     findfont fs scalefont /F exch def
  67.  
  68.     clippath pathbbox
  69.     20 sub /top exch def
  70.     20 sub /right exch def
  71.     20 add /bottom exch def
  72.     40 add /left exch def
  73.  
  74.     /textfont /Helvetica-Narrow findfont ts scalefont def
  75.     /x left def
  76.     /y top fs sub def
  77.  
  78.     /Helvetica-Bold findfont fs scalefont setfont
  79.     x y moveto
  80.     /y y ls sub def 
  81.  
  82.     % Check the interpreter's language level...
  83.     /languagelevel where { pop languagelevel }{ 1 } ifelse
  84.  
  85.     % ...and quit if Level 1
  86.     2 lt {
  87.     (Error: this program doesn't work on PostScript Level 1 printers!)show
  88.     showpage
  89.     stop
  90. } if
  91.  
  92.     FontName show        % print font name
  93.  
  94.     % Try to find the dictionary with the character names
  95.     F /CharStrings known {
  96.         F /CharStrings get
  97.     }{
  98.     (: Couldn't find character names (CharStrings dictionary)!) show
  99.     showpage
  100.     quit
  101.     } ifelse
  102.  
  103.     DictSort                % sort the character names
  104.  
  105.     { % forall
  106.     /GlyphName exch def        % remember the character name
  107.  
  108.     x y moveto F setfont    % the actual character...
  109.     GlyphName cvn glyphshow
  110.  
  111.     x y ts 2 mul sub moveto    % ...and its glyph name
  112.     textfont setfont GlyphName buffer cvs show
  113.  
  114.     /x x fs 2 mul add def
  115.     x right gt { /x left def /y y fs 2 mul sub def } if 
  116.     y bottom lt {
  117.         /y top fs sub def /x left def
  118.         showpage
  119.         x y moveto
  120.         /y y ls sub def 
  121.         /Helvetica-Bold findfont fs scalefont setfont
  122.         FontName show        % print font name
  123.     } if
  124.     } forall
  125.     y top ls sub ne x left ne or { showpage } if
  126.  
  127. } bind def
  128.  
  129. % Example:
  130. %/Times-Roman ShowGlyphs
  131.